/**
 * 
 */
package com.xpec.c4.service.group.datalayer;

import java.util.Map;
import java.util.concurrent.Future;

/**
 * 
 * 
 * @author lipeilin
 * @2011-2-23 下午03:38:42
 *
 * @param <K>
 * @param <V>
 */
public interface IShareMap<K, V> extends Map<K,V> {
	
	/**
	 * 存取，为了外部读
	 * 
	 * @param key
	 * @param value
	 *
	 * @author lipeilin
	 * @2011-3-21 下午01:15:01
	 */
	public void putForExternalRead(K key, V value);
	
	/**
	 * 存取，为了外部读
	 * 
	 * @param key
	 * @param value
	 * @param lifespan 保存的时间
	 *
	 * @author lipeilin
	 * @2011-3-22 下午05:31:15
	 */
	public void put(K key, V value,long lifespan);

	/**
	 * 只能得到本地缓存的大小。建议使用 {@link #totalSize()} 或{@link #localSize()}
	 */
	@Deprecated
	public int size();

	public String getName();

	/**
	 * 全部的数量。 还没实现好。
	 * 
	 * @return
	 * 
	 * @author lipeilin
	 * @2011-1-27 下午06:12:36
	 */
	@Deprecated
	public int totalSize();

	/**
	 * 本地的数量
	 * 
	 * @return
	 * 
	 * @author lipeilin
	 * @2011-1-27 下午06:12:58
	 */
	public int localSize();

	/**
	 * 按keys加锁
	 * 
	 * @param keys
	 * @return
	 * 
	 * @author lipeilin
	 * @2011-2-14 上午11:53:49
	 */
	public boolean lock(K... keys);

	public Map<K, V> getCache();

	/**
	 * 事务开始
	 * 
	 *
	 * @author lipeilin
	 * @2011-3-9 下午02:59:53
	 */
	public void txBegin();

	/**
	 * 事务提交
	 * 
	 *
	 * @author lipeilin
	 * @2011-3-9 下午03:00:00
	 */
	public void txCommit();

	/**
	 * 事务回滚 
	 * 
	 *
	 * @author lipeilin
	 * @2011-3-9 下午03:00:08
	 */
	public void txRollback();
	
	/**
	 * 删除对象
	 * 
	 * @param key
	 *
	 * @author lipeilin
	 * @2011-3-9 下午02:59:46
	 */
	public V delete(Object key);
	
	/**
	 * 异步设置
	 * 
	 * @param key
	 * @param value
	 * @return
	 *
	 * @2011-12-28 下午07:18:17
	 */
	public Future<V> putAsync(K key,V value);
	
	/**
	 * 异步移除
	 * 
	 * @param key
	 * @return
	 *
	 * @2011-12-28 下午07:18:31
	 */
	public Future<V> removeAsync(K key);
	
	/**
	 * 同步设置
	 * 
	 * @param key
	 * @param value
	 * @return
	 *
	 * @2011-12-28 下午07:18:17
	 */
	public V putSync(K key,V value);
	
	/**
	 * 同步移除
	 * 
	 * @param key
	 * @return
	 *
	 * @2011-12-28 下午07:18:31
	 */
	public V removeSync(K key);

}